package simple;

/**
 * 给定一个字符串 s ，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
 *
 * 示例 1：
 * 输入：s = "Let's take LeetCode contest"
 * 输出："s'teL ekat edoCteeL tsetnoc"
 *
 * 提示：
 * 1 <= s.length <= 5 * 104
 * s包含可打印的 ASCII 字符。
 * s不包含任何开头或结尾空格。
 * s里 至少 有一个词。
 * s中的所有单词都用一个空格隔开。
 *
 * 链接：https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
 *
 * */
public class ReverseWordsInAStringIII {
    class Solution {
        public String reverseWords(String s) {
            int left = 0;
            int right = 0;
            char[] chars = s.toCharArray();
            while(right < s.length()){
                if(chars[right] == ' '){
                    reverseString(chars,left,right-1);
                    left = right + 1;
                }
                right++;
            }
            reverseString(chars, left, right-1);
            return String.valueOf(chars);
        }

        void reverseString(char[] chars, int left, int right){
            while (left < right){
                char c = chars[left];
                chars[left] = chars[right];
                chars[right] = c;
                left++;
                right--;
            }
        }
    }

}
